정규표현식 기초

NOTE

정규표현식의 메타문자(* . ^ $ [] \ + |), 수량 반복({n}, {n,m}), 문자 클래스, 플래그와 실전 예시(이메일·URL)를 정리한다.

📌 개념

TIP

자주 쓰는 패턴

  • {3} : 앞 문자 3개 반복
  • {1,3} : 앞 문자 1~3개 반복
  • [A-Za-z0-9] : 대문자 AZ / 소문자 az / 숫자 0~9 중 하나와 일치

정규표현식 사이트

regex101: build, test, and debug regex

기초 메타문자

    • ⇒ *바로 앞에있는 문자 한개 이상 + 가능한 다른 문자들
      • ex) 113* ⇒ 11 + 3… (한개이상) + 1232412…(가능한 다른 문자)
  • . ⇒ 뉴라인을 제외한 오직 한 개의 글자와 일치
  • ^ ⇒ 줄의 시작 or 문자 집합의 의미 반대
  • $ ⇒ 줄끝
  • ⇒ 문자들의 집합
    • [xyz] : x,y,z 중 한 글자와 일치
    • [c-n] : c에서 n 사이에 들어 있는 한 문자와 일치
    • [B-Pk-y] : B에서 P까지 중이나 k에서 y까지 중의 한 글자와 일치
    • [a-z0-9]: 소문자나 숫자 중의 한 문자와 일치
    • [^b-d] : b와 d 사이의 문자를 제외한 모든 문자
    • [0-9][0-9][a-z] : 09 1개, 09 1개, a-z 1개 로 표현됨 (ex_ 11z , 02h …)
  • \ ⇒ 문자처럼 인식하게 해줌
    • ex) $ ⇒ ” 그 자체로 인식
    • : 하나 이상
  • | : or

표현식

표현식의미
[xy]문자 선택을 표현하며 x 와 y 중에 하나를 의미한다.
 [^xy]not 을 표현하며  x 및 y 를 제외한 문자를 의미한다.
 [x-z]range를 표현하며 x ~ z 사이의 문자를 의미한다. 
 ^escape 를 표현하며 ^ 를 문자로 사용함을 의미한다.
 \bword boundary를 표현하며 문자와 공백사이의 문자를 의미한다.
 \Bnon word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다.
 \ddigit 를 표현하며 숫자를 의미한다. 
 \Dnon digit 를 표현하며 숫자가 아닌 것을 의미한다. 
 \sspace 를 표현하며 공백 문자를 의미한다. 
 \Snon space를 표현하며 공백 문자가 아닌 것을 의미한다.
 \ttab 을 표현하며 탭 문자를 의미한다.
 \vvertical tab을 표현하며 수직 탭(?) 문자를 의미한다.
 \wword 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. 
 \Wnon word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. 
Flag의미
 gGlobal 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. 
 iIgnore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다.
 mMulti line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. 

예제

  1. ^ : 문자열의 처음을 나타냄
맞는 문자열
^groupgroup으로 시작하는 문자열group, groups, group program, …
  1. $ : 문자열의 끝을 나타냄
맞는 문자열
ing$ing로 끝나는 문자열ing, sing, hosting, booting, …
^code$code로 시작하고 끝남code
  1. . : 임의의 한문자를 나타냄
맞는 문자열
a.ba와 b 사이에 한 문자가 낀 문자열aab, abb, acb, …
ab.ab 다음에 한 문자가 붙은 문자열aba, abb, abc, …
a..ba와 b 사이에 두 문자가 낀 문자열a11a, aabb, abbb, …
^.apeape 앞에 한 문자가 낀 문자열로 시작함tape, caper, …
    • : 바로앞의 문자가 없거나 하나 이상이 있는 겅유
맞는 문자열
m*rr 앞에 m이 없거나 하나 이상 있음r, mr, mmr, mmmr, …
mr*sm 다음에 r이 없거나 하나 이상 있고 s가 맨 뒤에 있음ms, mrs, mrrs, mrrrs, …
mrs*mr 다음에 s가 없거나 하나 이상 있음mr, mrs, mrss, mrsss, …
    • : 바로 앞의 문자가 하나 이상 있음
맞는 문자열
m+rr 앞에 m이 하나 이상 있음mr, mmr, mmmr, …
mr+sm 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음mrs, mrrs, mrrrs, …
mrs+mr 다음에 s가 하나 이상 있음mrs, mrss, mrsss, …
  1. ? : 앞의 문자가 없거나 하나임
맞는 문자열
m+rr 앞에 m이 하나 이상 있음mr, mmr, mmmr, …
mr+sm 다음에 r이 하나 이상 있고 s가 맨 뒤에 있음mrs, mrrs, mrrrs, …
mrs+mr 다음에 s가 하나 이상 있음mrs, mrss, mrsss, …
  1. [] (꺽쇠묶음, 대괄호):
  • 꺼꾀묶음은 한 문자를 가리킴

  • 묶음안의 내용은 가리키는 문자의 범위를 나타냄

(문자 클래스로서 정규 표현식과는 언어가 다름)

  • 특정한 문자열을 제외하려면 묶음안에 ’^‘를 사용
맞는 문자열
[w]ss 앞에 w가 붙음ws
[ws]pp 앞에 w나 s가 붙음wp, sp
[a-z]88 앞에 잔 로마자(소문자) 하나가 붙음a8, b8, c8, … , z8
[a-zA-z][0-9]로마자 하나 뒤에 숫자 하나가 붙음a0, b5, K3, …
[^w]ss 바로 앞에 w가 아닌 문자 하나가 붙음as, 2s, es, …
[^ws]pp 바로 앞에 w나 s가 아닌 문자 하나가 붙음ap, hp, op, …
[^a-z]88 바로 앞에 잔 로마자가 아닌 문자 하나가 붙음A8, C8, 38, #8, …
^[^gh][^ij]$g나 h가 아닌 한 문자로 시작하고  i나 j가 아닌 한 문자로 끝남(꺾쇠묶음 밖의 ^는 문자열의 처음을 나타냄)ab, ty, ig, jh, …
  1. { } : 중괄호
  • 중괄호는 앞에 있는 문자의 개수를 나타냄

  • 묶음안에서 ’ , ‘는  문자 개수의 범위를 나타낼때 씀

맞는 문자열
w{0}ss 앞에 w가 없음s
w{1}ss 앞에 w가 하나 붙음ws
ws{3}pw가 앞에 오고 s가 셋 붙으면서 p가 뒤에 붙음wsssp
w{1,3}ss 앞에 w가 1~3개 붙음ws, wws, wwws
w{,2}ss 앞에 w가 두 개 이하 붙음s, ws, wws
w{2,}ss 앞에 w가 두 개 이상 붙음wss, wsss, …
  1. | : 또는 / or와 같은 선택문에 사용
맞는 문자열
wordphraseword 또는 phrase
mount(eding)mounted 또는 mounting
[^(abc)].+
  1. (거꿀빗금) : 메터문자의 성분을 없앨때 사용
맞는 문자열안 맞는 문자열
^[+]꺾쇠묶음으로 한 겹만 싸인 문자열[a], [ab], [abc], …[], abcd, [a[]], …
[^.]+.(comnet)com, net로 끝나는 바탕 도메인 이름(서브 도메인이 아닌 것)a.com, b.net, …

쉘 스크립트 - 문자열 : 정규표현식- 개요와 메타문자 (1)

💻 예시

이메일 정규표현식 (example@example.com)

^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$
  • ^[0-9a-zA-Z] : a-z, A-Z, 0-9 중 하나로 시작
  • [-_\.]? : -, _, . 중 하나가 있을 수도 없을 수도 있고
  • ([0-9a-zA-Z])* : a-z, A-Z, 0-9 가 0개 이상 존재
  • @ : @가 필수로 들어가고
  • [0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])* : 앞부분과 동일한 도메인 규칙
  • \. : . 이 들어가며
  • [a-zA-Z]{2,3} : a-z, A-Z 가 2개 또는 3개 존재 (최상위 도메인)
  • $ : 문자열 끝

URL 정규표현식

^(https?):\/\/([^:\/\s]+)
  • ^(https?) : http 또는 https로 시작
  • :\/\/ : :// 가 포함되며
  • ([^:\/\s]+) : :, /, 공백 이외의 문자가 한 개 이상
  • () : 괄호 안의 정규표현식을 그룹으로 캡처
  • \s : 공백 문자
  • [^...] : 대괄호 안 문자를 제외한 문자
  • ^(...) : 해당 패턴으로 시작